#ifndef SERIALPORTHELPER_H
#define SERIALPORTHELPER_H

#include <QObject>
#include <QtSerialPort/QSerialPort>
#include <QtSerialPort/QSerialPortInfo>
#include <QByteArray>
#include <QStringList>
#include <QTimer>

class SerialPortHelper : public QObject
{
    Q_OBJECT
public:
    explicit SerialPortHelper(QObject *parent = nullptr);

    // 获取可用串口列表
    Q_INVOKABLE QStringList getAvailablePorts();

    // 打开串口
    Q_INVOKABLE bool openSerialPort(const QString &portName, int baudRate, int dataBits, int parity, int stopBits);

    // 关闭串口
    Q_INVOKABLE void closeSerialPort();

    // 向串口写入数据
    Q_INVOKABLE void writeData(const QByteArray &data);

    // 检查串口是否打开
    Q_INVOKABLE bool isPortOpen();

    // 获取当前串口波特率
    Q_INVOKABLE int getBaudRate();

    // 获取当前串口数据位
    Q_INVOKABLE int getDataBits();

    // 获取当前串口奇偶校验位
    Q_INVOKABLE int getParity();

    // 获取当前串口停止位
    Q_INVOKABLE int getStopBits();

signals:
    // 当有数据接收时发出信号
    void dataReceived(const QByteArray &data);

    // 当串口状态改变时发出信号
    void portStateChanged(bool isOpen);

private slots:
    void handleReadyRead();

private:
    QSerialPort *serialPort;
    bool m_lastPortState = false;
};

#endif SERIALPORTHELPER_H
